def find_min_arrow_shots(points):
    """
    用最少数量的箭引爆气球问题
    
    参数:
    points: List[List[int]] - 气球坐标列表，每个气球由其左右边界表示 [start, end]
    
    返回:
    int - 最少需要的箭数
    """
    if not points:
        return 0
    
    # 按气球左边界排序
    points.sort(key=lambda x: x[0])
    
    result = 1  # points 不为空至少需要一支箭
    for i in range(1, len(points)):
        if points[i][0] > points[i - 1][1]:  # 气球i和气球i-1不挨着
            result += 1  # 需要一支箭
        else:  # 气球i和气球i-1挨着
            # 更新重叠气球最小右边界
            points[i][1] = min(points[i - 1][1], points[i][1])
    
    return result
